package org.algorithm.biubiu.wheel_1.数组.三月.第三周;

/**
 * @date 2022-03-15 星期二16:20
 *
 * <p>
 *      给你一个正整数数组arr，请你计算所有可能的奇数长度子数组的和。
 *
 *      子数组 定义为原数组中的一个连续子序列。
 *
 *      请你返回 arr中 所有奇数长度子数组的和 。
 *
 *
 * </p>
 *
 * uri:   https://leetcode-cn.com/problems/sum-of-all-odd-length-subarrays/
 */
public class 所有奇数长度子数组的和 {


    public static void main(String[] args) {
        int[] arr = {1,4,2,5,3};
        System.out.println(sumOddLengthSubarrays(arr));
    }


    /**
     * 输入：arr = [1,4,2,5,3]
     * 输出：58
     * 解释：所有奇数长度子数组和它们的和为：
     * [1] = 1
     * [4] = 4
     * [2] = 2
     * [5] = 5
     * [3] = 3
     * [1,4,2] = 7
     * [4,2,5] = 11
     * [2,5,3] = 10
     * [1,4,2,5,3] = 15
     * 我们将所有值求和得到 1 + 4 + 2 + 5 + 3 + 7 + 11 + 10 + 15 = 58
     */
    public static int sumOddLengthSubarrays(int[] arr) {
        if(arr==null||arr.length==0){
            return -1;
        }

        int[] sum = new int[arr.length+1];

        for(int i=0;i<arr.length; i++){
            sum[i+1] = sum[i]+ arr[i];
        }

        int res = 0;
        for(int j=1;j<=arr.length; j=j+2){
            for(int i = 0; i<arr.length; i++){
                if(j==1){
                    res = res+sum[sum.length-1];
                    break ;
                }else{
                    if((i+j-1)<arr.length){
                        res =  res + sum(sum,i,i+j-1);
                    }
                }
            }
        }
        return res;
    }



    public static int sum (int[] arr,int left ,int right){
        return  arr[right+1]-arr[left];
    }
}
